home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / EXTERROR.C < prev    next >
C/C++ Source or Header  |  1992-03-21  |  2KB  |  79 lines

  1. /*****************************************************************************
  2.  * EXTERROR.C - Extended error message handling.
  3.  ****************************************************************************/
  4.  
  5. #include "exterror.h"
  6.  
  7. #ifndef NULL
  8.   #define NULL 0L
  9. #endif
  10.  
  11. #define MAX_EXT_TABLES  8
  12.  
  13. static _Err_tab *extmsg_tables[MAX_EXT_TABLES] = {NULL};
  14. static char     nullstr[] = "";
  15.  
  16. /*----------------------------------------------------------------------------
  17.  * exterrset - Install or remove an application-specific error msg table.
  18.  *--------------------------------------------------------------------------*/
  19.  
  20. int exterrset(ptab, install)
  21.     _Err_tab    *ptab;
  22.     int         install;
  23. {
  24.     register int      tabidx;
  25.     register _Err_tab **pptab = extmsg_tables;
  26.  
  27.     for (tabidx = 0; tabidx < MAX_EXT_TABLES; ++tabidx, ++pptab) {
  28.         if (install) {
  29.             if (*pptab == NULL) {
  30.                 *pptab = ptab;
  31.                 return E_OK;
  32.             }
  33.         } else {
  34.             if (*pptab == ptab) {
  35.                 *pptab = NULL;
  36.                 return E_OK;
  37.             }
  38.         }
  39.     }
  40.  
  41.     return ERROR;
  42. }
  43.  
  44. /*----------------------------------------------------------------------------
  45.  * exterror - like strerror(), but looks for application-specific msg first.
  46.  *--------------------------------------------------------------------------*/
  47.  
  48. char *exterror(err)
  49.     register int err;
  50. {
  51.     register int      tabidx;
  52.     register _Err_tab *ptab;
  53.     register char     *themsg;
  54.     extern   char     *strerror();
  55.  
  56.     for (tabidx = 0; tabidx < MAX_EXT_TABLES; ++tabidx) {
  57.         for (ptab = extmsg_tables[tabidx]; ptab && ptab->code; ++ptab) {
  58.             if (ptab->code == err) {
  59.                 themsg = ptab->msg;
  60.                 goto RETURN_IT;
  61.             }
  62.         }
  63.     }
  64.  
  65.     if (err == 0) {
  66.         themsg = nullstr;
  67.     } else {
  68.         themsg = strerror(err);
  69.     }
  70.     
  71. RETURN_IT:
  72.  
  73.     if (themsg == NULL) {
  74.         themsg = nullstr;
  75.     }
  76.     
  77.     return themsg;
  78. }
  79.